The speed at which a personal computer operates is dependent upon a number of factors. Naturally, the speed of the microprocessor has a significant influence on the speed of operation of the overall computer system. Next to processor speed, in many cases, the video graphics subsystem has the most influence on the performance of the overall computer system. This is particularly true when a graphical user interface, such as MICROSOFT WINDOWS (by Microsoft Corporation of Redmond, Wash.) is used. In order to boost performance, most modern day personal computers use either a local video bus (which has a higher data bandwidth than the main peripheral bus) and an accelerated video card which increases the speed of certain operations. An accelerated video card allows the video card to perform selected video operations at high speed, rather than using the CPU to perform the operation. This accelerates the operation of the computer system in two ways: (1) the CPU no longer needs to perform low-level operations handled by the video card and (2) the data bandwidth for certain operations is greatly reduced resulting in less bus traffic.
In order for acceleration to increase the responsiveness of the system, the operating environment, such as WINDOWS, must know the capabilities of the accelerated video subsystem. When the operating environment is loaded, it initiates the loading of a video driver, which is a program which acts as an intermediary between the operating environment and accelerated video subsystem. The driver passes parameters to the operating environment which specify its capabilities. Thereafter, when the operating environment needs to perform a video operation which could benefit from one of the accelerated capabilities, it passes the necessary data to the driver. The driver interprets the information from the operating environment, processes the information and passes data via the bus to the video subsystem. The video subsystem then performs the video operation by writing data to its frame buffer. As the market for accelerated video subsystems has matured, it has become apparent that the speed of the video subsystem is in large part dependent upon the operation of the video driver.
One video operation which can have a significant effect on the responsiveness of the computer system is a bitmap stretch. In a bit-mapped image (or "bitmap"), the color information for each pixel in the bitmap is represented in a corresponding portion of memory. In a bitmap stretch, the destination bitmap is sized to dimensions greater than the source bitmap. Because of the complications of resizing a bitmap, most display device drivers only support bitmap stretching when the size of the destination bitmap is an integer stretch of the source bitmap. This technique is shown in FIGS. 1a-c. In FIG. 1a, the original bitmap 10 consists of nine pixels 12 arranged in a 3.times.3 array. For illustration purposes, each pixel has an associated index (1-9) which indicates the color of the pixel. The resulting destination bitmap 14 after performing a 2:1 stretch of the source bitmap 10 is shown in FIG. 1b. In FIG. 1b, each pixel 12 has been replicated twice in both the vertical and horizontal directions, resulting in a 6.times.6 array. As can be seen, each pixel from the bitmap of FIG. 1a is now a 2.times.2 array in FIG. 1b.
Similarly, in FIG. 1c, a destination bitmap 16 resulting from a 3:1 stretch of the source bitmap 10 of FIG. 1a is illustrated. In FIG. 1c, each pixel 12 of bitmap 10 of FIG. 1a is replicated in FIG. 1c as a 3.times.3 array. The resulting bitmap 16 is therefore a 9.times.9 array.
With an integer-multiple stretch of a bitmap array, the video operations are very simple, since each pixel is replicated by the integer multiple in both the "x" and "y" directions. However, with non-integer multiples, stretching becomes much more complex. For example, stretching the 3.times.3 bitmap of FIG. 1a to a 7.times.8 bitmap requires that decisions are made as to the number of times to replicate each pixel. Because of the complication of providing a non-integer multiple, most display device drivers only support integer stretching.
Therefore, a need has arisen in the industry for a video driver capable of supporting high-speed non-integer stretching of bitmapped images.